﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TumbaloSoft.Models;
using IBatisNet.DataMapper;
using TumbaloSoft.Helpers;
using TumbaloSoft.Helpers.QueryObjects;
using System.Collections;

namespace TumbaloSoft.Controllers
{
    public class GastosComunesController : TumbaloController
    {
        //
        // GET: /GastosComunes/
        private static Object lockObject = new Object();

        public ActionResult Buscar()
        {
            if (defaultAction != null) return defaultAction;

           // IList listaedif = HelperEdificio.selectAll();
            //ViewBag.listaedif = HelperEdificio.selectAll();

            try
            {
                Edificio ed;
                if (AccountController.getIdPerfil(HttpContext) == 3 || AccountController.getIdPerfil(HttpContext) == 0)
                {
                    IList listaedif = HelperEdificio.selectAll();
                    ViewBag.listaedif = HelperEdificio.selectAll();
                }
                else
                {
                    AdministradorEdificios administrador = HelperAdministrador.selectByIdPersona(AccountController.getIdPersona(HttpContext));
                    if (administrador == null) ed = null;
                    else
                    {
                       ed = HelperEdificio.selectById(HelperAdministrador.EdificioAdministradoSelect(administrador.prIdAdministrador));
                        
                    }
                    IList listaedif;
                    listaedif = new List <Edificio>();
                    listaedif.Add(ed);
                    ViewBag.listaedif = listaedif;

                }
            }
            catch (Exception ex)
            {
                Logger.Current.Error("Error de conección", ex);
                return View("~/Views/Shared/Error.cshtml");
            }

            IList listaserv = HelperTipoServicio.selectAll();
            ViewBag.listaserv = HelperTipoServicio.selectAll();

            return View();
        }
        /*
        public ActionResult Visualizar(BusquedaGastosComunes busqueda)
        {
            ModelState.Remove("prEdificios");
            ModelState.Remove("prFecIni");
            ModelState.Remove("prFecFin");
            ModelState.Remove("prMonto");
            ModelState.Remove("prServicios");

            if (busqueda.prFecIni != null && busqueda.prFecFin != null && busqueda.prFecFin < busqueda.prFecIni)
            {
                ModelState.AddModelError("prFecIni", "La fecha de inicio debe ser menor que la fecha de fin");
            }
            if (ModelState.IsValid)
            {
                IList listaserv = HelperGastosComunes.buscar(busqueda);
                ViewBag.listaserv = HelperGastosComunes.buscar(busqueda);
                return View(busqueda);
            }
            else
            {
                IList listaedif = HelperEdificio.selectAll();
                ViewBag.listaedif = HelperEdificio.selectAll();

                IList listaserv = HelperTipoServicio.selectAll();
                ViewBag.listaserv = HelperTipoServicio.selectAll();
                return View("Buscar", busqueda);
            }

        }*/

        public ActionResult Index(BusquedaGastosComunes busqueda)
        {
            if (defaultAction != null) return defaultAction;
                ModelState.Remove("prEdificios");
                ModelState.Remove("prFecIni");
                ModelState.Remove("prFecFin");
                ModelState.Remove("prMonto");
                ModelState.Remove("prServicios");

                if (busqueda.prFecIni != null && busqueda.prFecFin != null && busqueda.prFecFin < busqueda.prFecIni)
                {
                    ModelState.AddModelError("prFecIni", "La fecha de inicio debe ser menor que la fecha de fin");
                }
                if (ModelState.IsValid)
                {
                   // IList listagastos = HelperGastosComunes.buscar(busqueda);
                   // ViewBag.listagastos = HelperGastosComunes.buscar(busqueda);

                    try
                    {
                        if (AccountController.getIdPerfil(HttpContext) == 3 || AccountController.getIdPerfil(HttpContext) == 0)
                        {
                            IList listagastos = HelperGastosComunes.buscar(busqueda);
                            ViewBag.listagastos = HelperGastosComunes.buscar(busqueda);
                            return View(busqueda);
                        }
                        else
                        {
                            int idedif;
                            AdministradorEdificios administrador = HelperAdministrador.selectByIdPersona(AccountController.getIdPersona(HttpContext));
                            if (administrador == null) idedif = 0;
                            else
                            {

                                Edificio ed = HelperEdificio.selectById(HelperAdministrador.EdificioAdministradoSelect(administrador.prIdAdministrador));
                                idedif = ed.prIdEdificio;
                               // busqueda.prEdificios.Clear();
                                
                            }
                            busqueda.prEdificios = new List<Int32>();
                            busqueda.prEdificios.Add(idedif);
                            IList listagastos = HelperGastosComunes.buscar(busqueda);
                            ViewBag.listagastos = HelperGastosComunes.buscar(busqueda);
                            return View(busqueda);
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Current.Error("Error de conección", ex);
                        return View("~/Views/Shared/Error.cshtml");
                    }

                   
                }
                else
                {
                    try
                    {
                        Edificio ed;
                        if (AccountController.getIdPerfil(HttpContext) == 3 ||AccountController.getIdPerfil(HttpContext) == 0)
                        {
                            IList listaedif = HelperEdificio.selectAll();
                            ViewBag.listaedif = HelperEdificio.selectAll();
                        }
                        else
                        {
                            AdministradorEdificios administrador = HelperAdministrador.selectByIdPersona(AccountController.getIdPersona(HttpContext));
                            if (administrador == null) ed = null;
                            else
                            {
                                ed = HelperEdificio.selectById(HelperAdministrador.EdificioAdministradoSelect(administrador.prIdAdministrador));

                            }
                            IList listaedif;
                            listaedif = new List<Edificio>();
                            listaedif.Add(ed);
                            ViewBag.listaedif = listaedif;

                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Current.Error("Error de conección", ex);
                        return View("~/Views/Shared/Error.cshtml");
                    }

                    IList listaserv = HelperTipoServicio.selectAll();
                    ViewBag.listaserv = HelperTipoServicio.selectAll();
                    return View("Buscar", busqueda);
                }
           
        }

        public ActionResult Eliminar(int? idedif, int? idTipoServicio, DateTime? fecEmision)
        {
            if (defaultAction != null) return defaultAction;
            GastosComunes gastosalida = null;
            if (idedif.HasValue && idTipoServicio.HasValue && fecEmision.HasValue)
            {
                GastosComunes gasto = new GastosComunes();
                Edificio edif = new Edificio();
                edif.prIdEdificio = (int)idedif;
                gasto.prEdificio = edif; ;
                gasto.prFecEmision = (DateTime)fecEmision;
                TipoServicio tipo = new TipoServicio();
                tipo.prIdTipoServicio = (int)idTipoServicio;
                gasto.prTipoServicio = tipo;
                //se configuro una clase para la busqueda

                gastosalida = HelperGastosComunes.selectOne(gasto);
                //se eligio un unico gasto comun
               
                if (gastosalida != null) return View(gastosalida);
                else return HttpNotFound("No existe el gasto comun indicado ");


            }
            else return HttpNotFound("Esta pagina no existe");

        }
        [HttpPost]
        public ActionResult Eliminar(GastosComunes gasto)
        {
            //siempre entrara parametro valido
            if (defaultAction != null) return defaultAction;
            try
            {
                lock (lockObject)
                {
                    HelperGastosComunes.borrar(gasto);
                    ViewBag.mensaje = "Se eliminó el gasto común";
                    ViewBag.returnURL = "/GastosComunes/Index";
                }
                return View("~/Views/Shared/Exito.cshtml");

            }
            catch
            {
                return View("~/Views/Shared/Error.cshtml");
                //  return View();

            }


        }


        public ActionResult Pagar(int? idedif, int?idTipoServicio, DateTime? fecEmision)
        {
            GastosComunes gastosalida=null;
            if (defaultAction != null) return defaultAction;
            if (idedif.HasValue && idTipoServicio.HasValue && fecEmision.HasValue)
            {
                GastosComunes gasto = new GastosComunes();
                Edificio edif = new Edificio();
                edif.prIdEdificio = (int)idedif;
                gasto.prEdificio = edif; ;
                gasto.prFecEmision = (DateTime)fecEmision;
                TipoServicio tipo = new TipoServicio();
                tipo.prIdTipoServicio = (int)idTipoServicio;
                gasto.prTipoServicio=tipo;
                //se configuro una clase para la busqueda

                gastosalida = HelperGastosComunes.selectOne(gasto);
                //se eligio un unico gasto comun
                if (gastosalida != null && gastosalida.prEstado == "CANCELADO")
                {
                    ViewBag.mensaje = "Este gasto ya ha sido pagado";
                    ViewBag.returnURL = "/GastosComunes/Index";
                    return View("~/Views/Shared/Exito.cshtml");
                }
                if (gastosalida != null) return View(gastosalida); 
                else return HttpNotFound("No existe el gasto comun indicado ");
            
            
            }
            else return HttpNotFound("Esta pagina no existe");
     
        }
         [HttpPost]
        public ActionResult Pagar(GastosComunes gasto)
        {
            //siempre entrara parametro valido
            if (defaultAction != null) return defaultAction;
             try
           {
               lock (lockObject)
               {
                   HelperGastosComunes.pagar(gasto);
                   ViewBag.mensaje = "Se registró correctamente el pago del gasto común";
                   ViewBag.returnURL = "/GastosComunes/Index";
               }
                return View("~/Views/Shared/Exito.cshtml");

            }
            catch
            {
               return View("~/Views/Shared/Error.cshtml");
              //  return View();
                
            }
             
             
        }


        public ActionResult Registrar()
        {
            if (defaultAction != null) return defaultAction;

            try
            {
                Edificio ed;
                if (AccountController.getIdPerfil(HttpContext) == 3 || AccountController.getIdPerfil(HttpContext) == 0)
                {
                    IList listaedif = HelperEdificio.selectAll();
                    ViewBag.listaedif = HelperEdificio.selectAll();
                }
                else
                {
                    AdministradorEdificios administrador = HelperAdministrador.selectByIdPersona(AccountController.getIdPersona(HttpContext));
                    if (administrador == null) ed = null;
                    else
                    {
                        ed = HelperEdificio.selectById(HelperAdministrador.EdificioAdministradoSelect(administrador.prIdAdministrador));

                    }
                    IList listaedif;
                    listaedif = new List<Edificio>();
                    listaedif.Add(ed);
                    ViewBag.listaedif = listaedif;

                }
            }
            catch (Exception ex)
            {
                Logger.Current.Error("Error de conección", ex);
                return View("~/Views/Shared/Error.cshtml");
            }

            IList listaserv = HelperTipoServicio.selectAll();
            ViewBag.listaserv = HelperTipoServicio.selectAll();

            return View();
        }
        [HttpPost]
        public ActionResult Registrar(GastosComunes gasto)
        {
            if (defaultAction != null) return defaultAction;
            ModelState.Remove("prFecPago");
            ModelState.Remove("prEstado");
            ModelState.Remove("prEdificio");
            ModelState.Remove("prEdificio.prNombre");
            ModelState.Remove("prEdificio.prDireccion");
            ModelState.Remove("prEdificio.prNroPisos");
            ModelState.Remove("prEdificio.prNroDepartamentos");
            ModelState.Remove("prEdificio.prArea");
            ModelState.Remove("prEdificio.prEstado");
            ModelState.Remove("prEdificio.prDistrito");
            ModelState.Remove("prEdificio.prLogo");
            ModelState.Remove("prEdificio.prMonto");
            ModelState.Remove("prEdificio.prInformacion");
            ModelState.Remove("prTipoServicio");

            if (gasto.prFecEmision>gasto.prFecVencimiento)
            {
                ModelState.AddModelError("prFecEmision", "La fecha de emision debe ser menor a la de vencimiento");
            }
            if (gasto.prFecEmision > DateTime.Now)
            {
                ModelState.AddModelError("prFecEmision", "La fecha de emision debe ser menor o igual a la actual");
            }

            if (ModelState.IsValid)
            {
                //ingreamos a bd
                try
                {
                    //buscamos que no exista ese gasto comun
                    
                    
                        BusquedaGastosComunes bg = new BusquedaGastosComunes();
                        List<Int32> edificios = new List<Int32>();
                        List<Int32> servicios = new List<Int32>();
                        edificios.Add(gasto.prEdificio.prIdEdificio);
                        servicios.Add(gasto.prTipoServicio.prIdTipoServicio);
                        bg.prEdificios = edificios;
                        bg.prServicios = servicios;
                        bg.prFecIni = gasto.prFecEmision;
                        IList res = HelperGastosComunes.buscarMes(bg);
                        lock (lockObject)
                        {
                            if (res.Count == 0)
                                HelperGastosComunes.insert(gasto);
                        }
                        if (res.Count > 0)
                        {
                            ViewBag.mensaje = "Ya existe el gasto común para dicho edificio en la fecha";
                            ViewBag.returnURL = "/GastosComunes/Index";
                            return View("~/Views/Shared/Exito.cshtml");
                        }
                    
                }
                catch
                {
                    return View("~/Views/Shared/Error.cshtml");
                }
                ViewBag.mensaje = "Se registro correctamente el gasto común";
                ViewBag.returnURL = "/GastosComunes/Index";
                return View("~/Views/Shared/Exito.cshtml");

            }
            else
            {

                try
                {
                    Edificio ed;
                    if (AccountController.getIdPerfil(HttpContext) == 3 || AccountController.getIdPerfil(HttpContext) == 0)
                    {
                        IList listaedif = HelperEdificio.selectAll();
                        ViewBag.listaedif = HelperEdificio.selectAll();
                    }
                    else
                    {
                        AdministradorEdificios administrador = HelperAdministrador.selectByIdPersona(AccountController.getIdPersona(HttpContext));
                        if (administrador == null) ed = null;
                        else
                        {
                            ed = HelperEdificio.selectById(HelperAdministrador.EdificioAdministradoSelect(administrador.prIdAdministrador));

                        }
                        IList listaedif;
                        listaedif = new List<Edificio>();
                        listaedif.Add(ed);
                        ViewBag.listaedif = listaedif;

                    }
                }
                catch (Exception ex)
                {
                    Logger.Current.Error("Error de conección", ex);
                    return View("~/Views/Shared/Error.cshtml");
                }

                IList listaserv = HelperTipoServicio.selectAll();
                ViewBag.listaserv = HelperTipoServicio.selectAll();
                return View(gasto);
            }
            
            
        }
        public ActionResult RegistrarAgua()
        {
            if (defaultAction != null) return defaultAction;
            try
            {
                List<Int32> anhos = new List<Int32>();
                List<String> meses = new List<String>();

                meses.Add("");
                meses.Add("ENERO");
                meses.Add("FEBRERO");
                meses.Add("MARZO");
                meses.Add("ABRIL");
                meses.Add("MAYO");
                meses.Add("JUNIO");
                meses.Add("JULIO");
                meses.Add("AGOSTO");
                meses.Add("SETIEMBRE");
                meses.Add("OCTUBRE");
                meses.Add("NOVIEMBRE");
                meses.Add("DICIEMBRE");

                for (int i = DateTime.Now.Year; i >= DateTime.Now.Year - 2; i--) anhos.Add(i);
                ViewBag.meses = meses;
                ViewBag.anhos = anhos;

                try
                {
                    Edificio ed;
                    if (AccountController.getIdPerfil(HttpContext) == 3 || AccountController.getIdPerfil(HttpContext) == 0)
                    {
                        IList listaedif = HelperEdificio.selectAll();
                        ViewBag.listaedif = HelperEdificio.selectAll();
                    }
                    else
                    {
                        AdministradorEdificios administrador = HelperAdministrador.selectByIdPersona(AccountController.getIdPersona(HttpContext));
                        if (administrador == null) ed = null;
                        else
                        {
                            ed = HelperEdificio.selectById(HelperAdministrador.EdificioAdministradoSelect(administrador.prIdAdministrador));

                        }
                        IList listaedif;
                        listaedif = new List<Edificio>();
                        listaedif.Add(ed);
                        ViewBag.listaedif = listaedif;

                    }
                }
                catch (Exception ex)
                {
                    Logger.Current.Error("Error de conección", ex);
                    return View("~/Views/Shared/Error.cshtml");
                }



                return View();
            }
            catch
            {
                return View("~/Views/Shared/Error.cshtml");
            }

        }

        public ActionResult MuestraPorrateo(BusquedaAgua busqueda)
        {
            if (defaultAction != null) return defaultAction;

            if (busqueda.prFecEmision > busqueda.prFecVencimiento)
            {
                ModelState.AddModelError("prFecEmision", "La fecha de emision debe ser menor a la de vencimiento");
            }
            if (busqueda.prFecEmision > DateTime.Now)
            {
                ModelState.AddModelError("prFecEmision", "La fecha de emision debe ser menor o igual a la actual");
            }

            try
            {

                
                Edificio edif = HelperEdificio.selectById(busqueda.prIdEdificio);

                if (edif.prTieneContometro != "1")
                {
                    /* ViewBag.mensaje = "El edificio seleccionado no tiene contómetro";
                     ViewBag.returnURL = "/GastosComunes/Index";
                     return View("~/Views/Shared/Exito.cshtml");*/
                    //validamos antes de insertar

                    //inbicio bloque
                    if (ModelState.IsValid)
                    {

                        BusquedaGastosComunes bg = new BusquedaGastosComunes();
                        List<Int32> edificios = new List<Int32>();
                        List<Int32> servicios = new List<Int32>();
                        edificios.Add(edif.prIdEdificio);
                        servicios.Add(2);
                        bg.prEdificios = edificios;
                        bg.prServicios = servicios;
                        bg.prFecIni = busqueda.prFecEmision;
                        IList res = HelperGastosComunes.buscarMes(bg);

                        if (res.Count > 0)
                        {
                            ViewBag.mensaje = "Ya registró agua en dicho mes para el edificio anteriormente";
                            ViewBag.returnURL = "/GastosComunes/Index";
                            return View("~/Views/Shared/Exito.cshtml");
                        }
                        else
                        {
                            lock (lockObject)
                            {
                                GastosComunes gasto = new GastosComunes();
                                gasto.prEdificio = edif;
                                gasto.prFecEmision = (DateTime)busqueda.prFecEmision;
                                gasto.prFecVencimiento = (DateTime)busqueda.prFecVencimiento;
                                gasto.prMonto = (double)busqueda.prMonto;
                                gasto.prTipoServicio = HelperTipoServicio.selectById(2); //siempre sera este el id del agua;
                                gasto.prEstado = "REGISTRADO";
                                HelperGastosComunes.insert(gasto);

                                ViewBag.mensaje = "Se registró satisfactoriamente el gasto común";
                                ViewBag.returnURL = "/GastosComunes/Index";
                                return View("~/Views/Shared/Exito.cshtml");
                            }

                        }
                    }
                    else
                    {
                        return View("RegistrarAgua", busqueda); 
                    }
                    //fin blque

                }
                else
                {
                    //validar datos
                    if (ModelState.IsValid && ((DateTime)busqueda.prFecEmision).ToShortDateString() != "01/01/0001" && ((DateTime)busqueda.prFecVencimiento).ToShortDateString() != "01/01/0001")
                    {

                        BusquedaContometro busquedac = new BusquedaContometro();
                        busquedac.prIdEdificio = busqueda.prIdEdificio;
                        busquedac.prAnho = busqueda.prAnho;
                        busquedac.prMes = busqueda.prMes;
                        List<Contometro> lista = HelperContometro.selectByMonth(busquedac);

                        BusquedaContometro busquedapasada = new BusquedaContometro();
                        busquedapasada.prIdEdificio = busqueda.prIdEdificio;
                        busquedapasada.prAnho = busqueda.prAnho;
                        busquedapasada.prMes = busqueda.prMes - 1;
                        if (busquedac.prMes == 1)
                        {
                            busquedapasada.prAnho = busquedac.prAnho - 1;
                            busquedapasada.prMes = 12;
                        }
                        List<Contometro> listapasada = HelperContometro.selectByMonth(busquedapasada);

                        List<Departamento> listadptos = HelperDepartamento.selectByIdEdificio((Int32)busqueda.prIdEdificio);

                        //validar que la cantidad de dptos sea la misma q la cantidad de lecturas de contometros del mes
                        if (listadptos.Count != lista.Count)
                        {
                            ViewBag.mensaje = "No ha registrado todas las lecturas de contómetros del edificio";
                            ViewBag.returnURL = "/GastosComunes/Index";
                            return View("~/Views/Shared/Exito.cshtml");
                        }

                        List<Contometro> listadif = new List<Contometro>();
                        Boolean encontrado = false;

                        for (int i = 0; i < lista.Count; i++)
                        {
                            Contometro conto = new Contometro();
                            encontrado = false;
                            for (int j = 0; j < listapasada.Count; j++)
                            {
                                if (listapasada[j].prDepartamento.prIdDepartamento == lista[i].prDepartamento.prIdDepartamento)
                                {

                                    conto.prAnho = lista[i].prAnho;
                                    conto.prDepartamento = (Departamento)HelperDepartamento.selectById(lista[i].prDepartamento.prIdDepartamento);
                                    conto.prEstado = "ASIGNADO";
                                    conto.prIdContometro = lista[i].prIdContometro;
                                    if (listapasada[j].prMarca > lista[i].prMarca)
                                        conto.prMarca = lista[i].prMarca;
                                    else
                                        conto.prMarca = lista[i].prMarca - listapasada[j].prMarca;
                                    conto.prMes = lista[i].prMes;
                                    conto.prMonto = lista[i].prMonto;
                                    listadif.Add(conto);
                                    encontrado = true;
                                    break;
                                }
                            }
                            if (!encontrado)
                            {
                                conto.prAnho = lista[i].prAnho;
                                conto.prDepartamento = (Departamento)HelperDepartamento.selectById(lista[i].prDepartamento.prIdDepartamento);
                                conto.prEstado = "ASIGNADO";
                                conto.prIdContometro = lista[i].prIdContometro;
                                conto.prMarca = lista[i].prMarca;
                                conto.prMes = lista[i].prMes;
                                conto.prMonto = lista[i].prMonto;
                                listadif.Add(conto);
                            }

                        }
                        double sumam = 0;
                        for (int i = 0; i < listadif.Count; i++)
                        {
                            sumam += listadif[i].prMarca;
                            listadif[i].prMonto = (double)busqueda.prMonto * (listadif[i].prMarca / (double)busqueda.prMConsumo);
                        }
                        ViewBag.listadif = listadif;
                        ViewBag.edif = edif;
                        ViewBag.sumam = sumam;
                        ViewBag.mconsumo = busqueda.prMConsumo;
                        //si sumam > prmconsumo quiere decir q las lecturas marcan mas que el recibo, lo cual es inconsistente
                        if (sumam > busqueda.prMConsumo)
                        {
                            ViewBag.mensaje = "Ingresó un consumo de agua inválido";
                            ViewBag.returnURL = "/GastosComunes/Index";
                            return View("~/Views/Shared/Exito.cshtml");
                        }
                        String mesanho = busqueda.prAnho.ToString() + String.Format("{0:00}", busqueda.prMes);
                        
                        ViewBag.monto = busqueda.prMonto;
                        ViewBag.FecEmision = busqueda.prFecEmision;
                        ViewBag.FecVencimiento = busqueda.prFecVencimiento;
                        ViewBag.mesanho = mesanho;
                        TempData["listadiferencias"] = listadif;
                        return View();

                        //mostrar para pantalla
                    }
                    //caso datos nulos 
                    List<Int32> anhos = new List<Int32>();
                    List<String> meses = new List<String>();

                    meses.Add("");
                    meses.Add("ENERO");
                    meses.Add("FEBRERO");
                    meses.Add("MARZO");
                    meses.Add("ABRIL");
                    meses.Add("MAYO");
                    meses.Add("JUNIO");
                    meses.Add("JULIO");
                    meses.Add("AGOSTO");
                    meses.Add("SETIEMBRE");
                    meses.Add("OCTUBRE");
                    meses.Add("NOVIEMBRE");
                    meses.Add("DICIEMBRE");

                    for (int i = DateTime.Now.Year; i >= DateTime.Now.Year - 2; i--) anhos.Add(i);
                    ViewBag.meses = meses;
                    ViewBag.anhos = anhos;

                    try
                    {
                        Edificio ed;
                        if (AccountController.getIdPerfil(HttpContext) == 3 || AccountController.getIdPerfil(HttpContext) == 0)
                        {
                            IList listaedif = HelperEdificio.selectAll();
                            ViewBag.listaedif = HelperEdificio.selectAll();
                        }
                        else
                        {
                            AdministradorEdificios administrador = HelperAdministrador.selectByIdPersona(AccountController.getIdPersona(HttpContext));
                            if (administrador == null) ed = null;
                            else
                            {
                                ed = HelperEdificio.selectById(HelperAdministrador.EdificioAdministradoSelect(administrador.prIdAdministrador));

                            }
                            IList listaedif;
                            listaedif = new List<Edificio>();
                            listaedif.Add(ed);
                            ViewBag.listaedif = listaedif;

                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Current.Error("Error de conección", ex);
                        return View("~/Views/Shared/Error.cshtml");
                    }
                    return View("RegistrarAgua",busqueda);

                }
            }
            catch
            {
                return View("~/Views/Shared/Error.cshtml");
            }
          }
        [HttpPost]
        public ActionResult MuestraPorrateo(double monto, DateTime FecEmision, DateTime FecVencimiento, int idedificio)
        {
            if (defaultAction != null) return defaultAction;
            try
            {
                List<Contometro> lista = (List<Contometro>)TempData["listadiferencias"];
                lock (lockObject)
                {
                    BusquedaGastosComunes bg = new BusquedaGastosComunes();
                    List<Int32> edificios = new List<Int32>();
                    List<Int32> servicios = new List<Int32>();
                    edificios.Add(idedificio);
                    servicios.Add(2);
                    bg.prEdificios = edificios;
                    bg.prServicios = servicios;
                    bg.prFecIni = FecEmision;
                    IList res = HelperGastosComunes.buscarMes(bg);

                    if (res.Count > 0)
                    {
                        ViewBag.mensaje = "Ya existe consumo de agua para dicho mes en ese edificio";
                        ViewBag.returnURL = "/GastosComunes/Index";
                        return View("~/Views/Shared/Exito.cshtml");
                    }
                    else
                    {

                        //para cada elemento(contometro) de lista
                        foreach (Contometro conto in lista)
                        {
                            //aumentar valor de cuota y actualizar estado
                            BusquedaCuota buscacuota = new BusquedaCuota();
                            buscacuota.prIdInmueble = conto.prDepartamento.prIdDepartamento;
                            buscacuota.prEstado = "ESPERA CONSUMO DE AGUA";
                            String mest = conto.prMes.ToString();
                            mest = ("00" + mest).Substring(mest.Length, 2);
                            buscacuota.prCodmes = conto.prAnho.ToString() + mest;
                            Cuota c = HelperCuota.selectCuotasMes(buscacuota);
                            Cuota d = new Cuota();
                            if (c != null)
                            {
                                c.prMonto += conto.prMonto;
                                //actualizar su estado en la tabla de contometro (se tiene su id)
                                HelperContometro.asignar(conto);

                                //actualizamos estado en la tabla de cuota

                                HelperCuota.AsignarAgua(c);

                                //insertamos valor en detalle
                                d.prIdCuota = c.prIdCuota;
                                d.prMonto = conto.prMonto;
                                HelperCuota.InsertarDetalle(d);
                                //decrementamos el monto total para quedarnos al final con el gasto comun de agua

                                monto -= conto.prMonto;
                            }

                        }
                        //registramos el monto comun de agua en gastos comunes: se requiere monto total y sumatoria de montos aumentados x dpto
                        GastosComunes gasto = new GastosComunes();
                        gasto.prEdificio = new Edificio();
                        gasto.prEdificio.prIdEdificio = idedificio;
                        gasto.prEstado = "REGISTRADO";
                        gasto.prFecEmision = FecEmision;
                        gasto.prFecVencimiento = FecVencimiento;
                        gasto.prMonto = monto;
                        gasto.prTipoServicio = new TipoServicio();
                        gasto.prTipoServicio.prIdTipoServicio = 2;

                        HelperGastosComunes.insert(gasto); //si se llego a este punto es porque no hay errores

                        ViewBag.mensaje = "Se agregó gasto de agua en dicho mes con éxito";
                        ViewBag.returnURL = "/GastosComunes/Index";
                        return View("~/Views/Shared/Exito.cshtml");
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Current.Error("ERROR EN ACTUALIZACION DE MONTO DE CUOTA POR PORRATEO", e);
                return View("~/Views/Shared/Error.cshtml");

            }

        }
    }
}
